package com.volcengine.service.videoaiot;

import com.volcengine.model.video_aiot.request.*;
import com.volcengine.model.video_aiot.response.*;
import com.volcengine.service.IBaseService;

public interface VideoAIoTService extends IBaseService {
    ///空间相关API

    /**
     * @param createSpaceRequest create space arguments
     * @return created space id
     * @throws Exception
     */
    IDResponse createSpace(CreateSpaceRequest createSpaceRequest) throws Exception;

    /**
     * @param spaceID
     * @return space
     * @throws Exception
     */
    SpaceResponse getSpace(String spaceID) throws Exception;

    ListSpaceResponse listSpace(ListSpaceRequest listSpaceRequest) throws Exception;

    IDResponse startSpace(String spaceID) throws Exception;

    IDResponse stopSpace(String spaceID) throws Exception;

    IDResponse deleteSpace(String spaceID) throws Exception;

    IDResponse updateSpace(UpdateSpaceRequest updateSpaceRequest) throws Exception;

    RawResponse setSpaceTemplate(SetSpaceTemplateRequest setSpaceTemplateRequest) throws Exception;

    RawResponse unsetSpaceTemplate(String spaceID, String templateType) throws Exception;

    GetDataProjectWithBindWidthAndFlowResponse getDataProjectWithBindWidthAndFlow(GetDataProjectWithBindWidthAndFlowRequest getDataProjectWithBindWidthAndFlow) throws Exception;

    GetTotalDataResponse getTotalData(String time) throws Exception;

    SpaceTemplateResponse getSpaceTemplate(String spaceID) throws Exception;

    RawResponse updateAuthInSpace(UpdateAuthInSpaceRequest updateAuthInSpace) throws Exception;

    RawResponse disableAuthInSpace(String spaceID, String domain) throws Exception;

    CreateDeviceResponse createDevice(CreateDeviceRequest createDeviceRequest) throws Exception;

    ListDeviceResponse listDevice(ListDeviceRequest listDeviceRequest) throws Exception;

    GetDeviceResponse getDevice(GetDeviceRequest getDeviceRequest) throws Exception;

    IDResponse freshDevice(DeviceRequest freshDeviceRequest) throws Exception;

    @Deprecated
    IDResponse startDevice(DeviceRequest startDevice) throws Exception;

    @Deprecated
    IDResponse stopDevice(DeviceRequest stopDevice) throws Exception;

    IDResponse deleteDevice(DeviceRequest deleteDevice) throws Exception;

    IDResponse updateDevice(UpdateDeviceRequest updateDeviceRequest) throws Exception;

    @Deprecated
    ListDeviceRecordsResponse listDeviceScreenshots(ListDeviceRecordsRequest listDeviceRecordsRequest) throws Exception;

    @Deprecated //use list stream records instead
    ListDeviceRecordsResponse listDeviceRecords(ListDeviceRecordsRequest listDeviceRecordsRequest) throws Exception;

    ListStreamRecordsResponseV3 listStreamRecords(ListStreamRecordsRequestV3 listStreamRecordsRequestV3) throws Exception;

    @Deprecated //use play cloud record instead
    CloudPlayResponse cloudRecordPlay(CloudRecordPlayRequest cloudRecordPlayRequest) throws Exception;

    PlayCloudResponse playCloudRecord(PlayCloudRecordRequest playCloudRecordRequest) throws Exception;

    LocalMediaDownloadResponse localMediaDownload(LocalMediaDownloadRequest localMediaDownloadRequest) throws Exception;

    GetLocalMediaDownloadResponse getLocalDownload(String id) throws Exception;

    @Deprecated
    IDResponse genSipID(String sipServerID, String deviceType) throws Exception;
    IDResponse genSipIDBySpaceID(String spaceID, String deviceType) throws Exception;

    GetDeviceChannelResponse getDeviceChannels(GetDeviceChannelRequest getDeviceChannelRequest) throws Exception;

    GetDeviceChannelV2Response getDeviceChannelsV2(GetDeviceChannelV2Request getDeviceChannelRequest) throws Exception;

    RawResponse setAlarmGuard(SetAlarmGuardRequest setAlarmGuardRequest) throws Exception;

    RawResponse resetAlarm(ResetAlarmRequest resetAlarmRequest) throws Exception;

    ListAlarmNotifyResponse listAlarmNotify(ListAlarmNotifyRequest listAlarmNotifyRequest) throws Exception;

    RawResponse deleteAlarmNotify(String alarmNotifyID) throws Exception;

    RawResponse deleteAlarmNotifyAll(String apceID, String deviceNSID) throws Exception;

    //device control
    RawResponse cloudControl(DeviceCloudControlRequest deviceCloudControlRequest) throws Exception;

    DeviceQueryPresetResponse queryPresetInfo(DeviceQueryPresetRequest queryPresetRequest) throws Exception;

    RawResponse cruiseControl(DeviceCruiseControlRequest deviceCruiseControlRequest) throws Exception;

    RawResponse setCruiseTrack(SetCruiseTrackRequest setCruiseTrackRequest) throws Exception;

    GetCruiseTrackResponse getCruiseTrack(GetCruiseTrackRequest getCruiseTrackRequest) throws Exception;

    ListCruiseTracksResponse listCruiseTracks(ListCruiseTracksRequest listCruiseTracksRequest) throws Exception;

    RawResponse deleteCruiseTrack(DeleteCruiseTrackRequest deleteCruiseTrackRequest) throws Exception;

    RawResponse startCruiseTrack(StartCruiseTrackRequest startCruiseTrackRequest) throws Exception;

    RawResponse stopCruiseTrack(StopCruiseTrackRequest stopCruiseTrackRequest) throws Exception;

    ///流
    GetStreamResponse getStream(GetStreamRequest getStreamRequest) throws Exception;

    ListStreamsResponse listStreams(ListStreamsRequest listStreamsRequest) throws Exception;

    IDResponse updateStream(UpdateStreamRequest updateStreamRequest) throws Exception;

    StartStreamResponse startStream(StreamRequest startStream) throws Exception;

    IDResponse stopStream(StreamRequest stopStream) throws Exception;

    IDResponse createStream(CreateStreamRequest createStream) throws Exception;

    IDResponse deleteStream(StreamRequest deleteStream) throws Exception;

    StatStreamResponse statStream(StatStreamRequest statStreamRequest) throws Exception;
    IDResponse streamStartRecord(StreamStartRecordRequest streamStartRecordRequest) throws Exception;

    RawResponse streamStopRecord(String recordID) throws Exception;

    GetStreamRecordResponse getStreamRecord(String recordID) throws Exception;

    DeleteStreamRecordResponse deleteStreamRecord(String recordID) throws Exception;

    StreamLogsResponse streamLogs(StreamLogsRequest streamLogs) throws Exception;

    GetStreamDataResponse getStreamData(GetStreamDataRequest getStreamData) throws Exception;

    @Deprecated
    IDResponse forbidStream(String streamID) throws Exception;

    IDResponse forbidStream(StreamRequest streamRequest) throws Exception;

    @Deprecated
    IDResponse unForbidStream(String streamID) throws Exception;

    IDResponse allowStream(StreamRequest streamRequest) throws Exception;

    //录像
    @Deprecated
    GetRecordResponse getRecordList(GetRecordListRequest request) throws Exception;

    @Deprecated
    GetRecordV2Response getRecordListV2(GetRecordListV2Request request) throws Exception;

    GetRecordV3Response getRecordListV3(GetRecordListV3Request request) throws Exception;

    PlaybackStartResponse playbackStart(PlaybackStartRequest request) throws Exception;

    PlaybackStartResponse playbackStartV2(PlaybackStartRequestV2 request) throws Exception;

    PlaybackStatResponse playbackStat(String playbackStreamID) throws Exception;

    IDResponse playbackStop(String playbackStreamID) throws Exception;

    IDResponse playbackControl(PlaybackControlRequest request) throws Exception;

    //录制模板
//    IDResponse createTemplate(CreateTemplateRequest createTemplateRequest, String templateType) throws Exception;
//
//    Template getTemplate(String templateID, String templateType) throws Exception;
//
//    IDResponse deleteTemplate(String templateID, String templateType) throws Exception;

    //ai库

    //ai布控

    //慢直播

    //国标级联

    //语音对讲
    StartVoiceTalkResponse startVoiceTalk(StartVoiceTalkRequest startVoiceTalkRequest) throws Exception;

    RawResponse stopVoiceTalk(StopVoiceTalkRequest stopVoiceTalkRequest) throws Exception;

    //录像计划
    IDResponse createRecordPlan(CreateRecordPlanRequest createRecordPlanRequest) throws Exception;

    IDResponse updateRecordPlan(UpdateRecordPlanRequest updateRecordPlanRequest) throws Exception;

    IDResponse deleteRecordPlan(String planID) throws Exception;

    RecordPlanResponse getRecordPlan(String planID) throws Exception;

    ListRecordPlansResponse listRecordPlans(ListRecordPlansRequest listRecordPlansRequest) throws Exception;

    ListRecordPlanChannelsResponse listRecordPlanChannels(String planID) throws Exception;
}
